/**
 * 定义消息接口
 */
interface PostMessageData {
	funcName: Array<string>;
	property: Array<any>;
  }

/**
 * @description 页面间通信 hook
 * @param dom - iframe DOM 元素
 * @param funcName - 需要调用的函数名
 * @param property - 传递的数据
 * @returns Promise<string>
 * @throws Error 当 dom 或 funcName 无效时抛出错误
 */
export function usePostMessage(dom: HTMLIFrameElement | null, funcName: Array<string>, property: Array<any>) {
	// 此处不做限制，通信页面会做相应参数的异常处理
	return new Promise((resolve, reject) => {
		try {

			if (!dom) {
				throw new Error('dom未传入');
			}

			if (!funcName) {
				throw new Error('函数名未传入');
			}

			if (!dom.contentWindow) {
				throw new Error('iframe 元素的 contentWindow 未获取到');
			}

			const message: PostMessageData = {
				funcName,
				property
			};

			dom.contentWindow.postMessage(message, '*');
			resolve('success')
		} catch (error) {
			reject(error)
		}
	})
}
